// 扫描类 Scanner
export default class Scanner {
    constructor(templateStr) {
        this.templateStr = templateStr;
        // 指针 
        this.pos = 0;
        // 尾巴 尾巴一开始是模板字符串 
        this.tail = templateStr;
    }

    // 功能仅仅是略过指定内容
    scan(flag) {
        if (this.tail.indexOf(flag) == 0) {
            this.pos += flag.length;
            // 一定要记住 tail也要改变 改变尾巴为从当前指针这个字符开始到最后的字符
            this.tail = this.templateStr.substring(this.pos);
        }
    }

    // 让指针进行扫描，直到遇到指定内容就结束，并且返回结束之前扫描过的所有文字
    scanUtil(stopFlag) {
        // 记录执行方法开始时的pos值
        var begin = this.pos;
        // 如果一开始的匹配结果不是stopFlag，就一直继续扫描 
        while (!this.eos() && this.tail.indexOf(stopFlag) !== 0) {
            this.pos++;
            this.tail = this.templateStr.substring(this.pos);
        }

        // 返回之前的所有内容 substring(begin,end)
        var result = this.templateStr.substring(begin, this.pos);
        return result;
    }

    // end of string 判断是否需要结束
    eos() {
        return this.pos >= this.templateStr.length;
    }
}